package com.cloud.picture.api.aliyunai.model.outpainting;

import cn.hutool.core.annotation.Alias;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.io.Serializable;

/**
 * @author syf
 */
@Data
public class CreateOutPaintingTaskRequest implements Serializable {

    /**
     * 模型
     */
    private String model = "image-out-painting";

    /**
     * 输入图像信息
     */
    private Input input;

    /**
     * 图像处理参数
     */
    private Parameters parameters;
    @Data
    public static class Input implements Serializable{
        /**
         * 图像URL地址或者图像base64数据。（必选）
         */
        @Alias("image_url")
        private String imageUrl;

        private static final long serialVersionUID = 2L;
    }

    @Data
    public static class Parameters implements Serializable{

        /**
         * 逆时针旋转角度。默认值为0，取值范围[0, 359]。（可选）
         */
        private Integer angle;

        /**
         * 可选,图像宽高比。可选值有["","1:1", "3:4", "4:3", "9:16", "16:9"]。
         * 默认为""，表示不设置输出图像的宽高比。
         */
        @Alias("output_ratio")
        private String outputRatio;

        /**
         * 可选,图像居中，在水平方向上按比例扩展图像。
         * 默认值为1.0，取值范围[1.0, 3.0]。
         */
        @Alias("x_scale")
        @JsonProperty("xScale")
        private Float xScale;

        /**
         * 可选,图像居中，在垂直方向上按比例扩展图像。
         * 默认值为1.0，取值范围[1.0, 3.0]。
         */
        @Alias("y_scale")
        @JsonProperty("yScale")
        private Float yScale;

        /**
         * 可选,在图像上方添加像素。
         * 默认值为0，取值限制top_offset+bottom_offset < 3×输入图像高度。
         */
        @Alias("top_offset")
        private Integer topOffset;

        /**
         * 可选,在图像下方添加像素。
         * 默认值为0，取值限制top_offset+bottom_offset < 3×输入图像高度
         */
        @Alias("bottom_offset")
        private Integer bottomOffset;

        /**
         * 可选,在图像左侧添加像素。
         * 默认值为0，扩展限制left_offset+right_offset < 3×输入图像宽度。
         */
        @Alias("left_offset")
        private Integer leftOffset;

        /**
         * 可选,在图像右侧添加像素。
         * 默认值为0，扩展限制left_offset+right_offset < 3×输入图像宽度。
         */
        @Alias("right_offset")
        private Integer rightOffset;

        /**
         * 可选,开启图像最佳质量模式。默认值为false，减少图像生成的等待时间。
         * 如果您需要更多图像细节，可以设置为true，但耗时会成倍增加。
         */
        @Alias("best_quality")
        private Boolean bestQuality;

        /**
         * 可选,限制模型生成的图像文件大小。默认值为true，限制为：
         * 当输入图像单边长度<=10000时，输出图像文件大小在5MB以下。
         * 当输入图像单边长度>10000时，输出图像文件大小在10MB以下。
         */
        @Alias("limit_image_size")
        private Integer limitImageSize;

        /**
         * 可选,添加Generated by AI水印。默认值为True，在输出图像左下角处添加水印。
         */
        @Alias("add_watermark")
        private Boolean addWaterMark = false;

        private static final long serialVersionUID = 3L;
    }
    private static final long serialVersionUID = 1L;
}
